/**
 * @Author: zhongyang
 * @Date: 2022/6/22 13:47
 */

package main

import "fmt"

/**
01_简单工厂模式
概念：简单工厂模式（Simple Factory Pattern）属于类的创新型模式，
	 又叫静态工厂方法模式（Static FactoryMethod Pattern）,是通过专门定义一个类来负责创建其他类的实例，
	 被创建的实例通常都具有共同的父类。
缺点：当生产新产品时，需要修改工厂类的函数（NewAPI），破坏了开闭原则
*/

// =============1.定义简单的接口=============

type SimpleAPI interface {
	Say(content string) string
}

// ============2.分别创建不同结构体来实现该接口==============

type Chinese struct {
}

func (c Chinese) Say(content string) string {
	fmt.Println("讲中文")
	return "中文"
}

type English struct {
}

func (e English) Say(content string) string {
	fmt.Println("say English")
	return "英语"
}

// ==========3.使用一个专门的函数进行对象的创建================

func NewAPI(apiName string) SimpleAPI {
	switch apiName {
	case "cn":
		return &Chinese{}
	case "en":
		return &English{}
	}
	return nil
}

func main() {
	api1 := NewAPI("cn")
	res := api1.Say("cn")
	fmt.Println("调用结果:", res)
	api2 := NewAPI("en")
	res = api2.Say("en")
	fmt.Println("调用结果:", res)
}
